home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
fb386
/
tool
/
peer011b
/
peer011b.bas
< prev
next >
Wrap
BASIC Source File
|
1995-02-20
|
23KB
|
466 lines
10 '####################################################################
20 '##### #####
30 '##### 「BASICで、ダンプしましょ」 Ver 0.11b #####
40 '##### #####
50 '##### [PEER.BAS] + [BB011b.REX] #####
60 '##### #####
70 '##### 企画・制作者 「たまふり・ふるふる」 #####
80 '##### #####
90 '####################################################################
100 '●画面、変数設定 & 機械語る-ちん読み込み
110 SCREEN@ 0:CLS:WIDTH 80,25:CONSOLE 3,16,1:COLOR 7,0,7,4:DEFINT A-Z
120 CLEAR ,,,,1024:LOADM"BB011b.REX",0
130 DIM SMY&(16):SRC&=&H14:DAT$=SPACE$(16):DAT&=PEEK(VARPTR(DAT$),4)
140 ' ********* X ******** ****** ダミ-Y ******* ****** 文字数 ******
150 GC$=CHR$(&HE8)+CHR$(&H01)+CHR$(&H00)+CHR$(&H00)+CHR$(&H10)+CHR$(&H00)
160 ' グラフィックBIOS設定(CRTCの操作なし)
170 BIOSNO&=&H20
180 R_EAX&=&H0100:R_EBX&=&H0:R_ECX&=&H0:R_EDX&=&H43
190 R_ESI&=&H0:R_EDI&=&H0
200 R_DS%=&H14:R_ES%=&H14:R_FS%=&H14:R_GS%=&H14
210 '
220 CALLM&H0A,BIOSNO&,VARPTR(R_EAX&),VARPTR(R_EBX&),VARPTR(R_ECX&),VARPTR(R_EDX&),VARPTR(R_ESI&),VARPTR(R_EDI&),VARPTR(R_DS%),VARPTR(R_ES%),VARPTR(R_FS%),VARPTR(R_GS%)
230 '
240 BIOSNO&=&H20
250 R_EAX&=&H0540:R_EBX&=&H0:R_ECX&=&H0:R_EDX&=&H00
260 R_ESI&=&H0:R_EDI&=&H0
270 R_DS%=&H14:R_ES%=&H14:R_FS%=&H14:R_GS%=&H14
280 '
290 CALLM&H0A,BIOSNO&,VARPTR(R_EAX&),VARPTR(R_EBX&),VARPTR(R_ECX&),VARPTR(R_EDX&),VARPTR(R_ESI&),VARPTR(R_EDI&),VARPTR(R_DS%),VARPTR(R_ES%),VARPTR(R_FS%),VARPTR(R_GS%)
300 '●PFキ-の初期化 & 定義
310 FOR LOP0=2 TO 10 : KEY LOP0,"" : NEXT
320 KEY 1,"画面止":ON KEY (1) GOSUB 2480:KEY (1) ON
330 '●タイトル表示
340 DUM$="「BASICでダンプしましょ」 Ver 0.11a 1994/08/20 - /??/??"
350 LOCATE 0,0:PRINT CHR$(&H1B)+"[7;32m"+SPACE$(11)+DUM$+SPACE$(11)+CHR$(&H1B)+"[0;1m"
360 '●文字列定義
370 MEM$="ofADRESS +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F SUM 0123456789ABCDEFofADRESS +3 +2 +1 +0 +7 +6 +5 +4 +B +A +9 +8 +F +E +D +C"
380 ADM$="01.****.********.*** : 02.****.********.*** : 03.****.********.*** 04.****.********.*** : 05.****.********.*** : 06.****.********.***"
390 '●コントロ-ルコ-ド表示
400 GOSUB 2720
410 '●アドレス入力
420 GOSUB 1370
430 LOCATE 31,1:PRINT SPACE$(29)
440 LOCATE 0,1 :INPUT"スタ-ト オフセット アドレス:&H",DUM$
450 IF KLEN(DUM$)<>LEN(DUM$) THEN GOTO 430' 2Byt文字除外
460 IF "I"=LEFT$(DUM$,1) OR "i"=LEFT$(DUM$,1) THEN
470 MID$(DUM$,1,1)=CHR$(&H20):GOSUB 1410
480 ENDIF
490 '●アドレス数値変換
500 IF LEN(DUM$)>2 THEN MID$(DUM$,LEN(DUM$)-1,2)="00" ELSE DUM$=""
510 SAD&=VAL("&H"+DUM$)
520 '●ESCコ-ドで色指定
530 IF RDAT+DUMP=0 THEN DUM$=LEFT$ (MEM$,77)
540 IF RDAT=-1 AND DUMP=0 THEN DUM$=RIGHT$(MEM$,56)
550 IF RDAT=0 AND DUMP=-1 THEN DUM$=LEFT$ (MEM$,77):MID$(DUM$,1,2)=" "
560 IF RDAT+DUMP=-2 THEN DUM$=RIGHT$(MEM$,56):MID$(DUM$,1,2)=" "
570 LOCATE 0,2 :PRINT CHR$(&H1B)+"[7;32m"+DUM$;
580 LOCATE 0,19:PRINT DUM$;
590 LOCATE 0,20:PRINT " SUM ";CHR$(&H1B)+"[0;1m"
600 SORT&=RDAT*-1:Y=57:Y1=72:CLS 5:CLS 1' Y=Gモ-ドY軸の初期値、G画面,T画面の消去
610 ON DUMP*-1 GOTO 1530' I/O 読出
620 FOR LOP0=1 TO 16'--------------------LOOP0 16回-------------------
630 '●4バイト単位で取り込み
640 FOR LOP1=0 TO 12 STEP 4'-------------LO0P1 4回-------------
650 DUM&=SAD&+LOP1:DUM&=CALLM (&H0,SRC&,DUM&,4,SORT&)
660 POKE DAT&+LOP1,DUM&,4
670 NEXT'---------------LOOP1 NEXT(16byt 1行分取り込み)---------
680 '●整列、SUM 計算
690 FOR LOP1=0 TO 15 '-------------LOOP1 16回-------------------
700 LDA$=LDA$+" "+RIGHT$("00"+HEX$(PEEK(DAT&+LOP1)),2)
710 SMY&(LOP1)=SMY&(LOP1)+PEEK(DAT&+LOP1):SMX&=SMX&+PEEK(DAT&+LOP1)
720 NEXT'--------------------LOOP1 NEXT-------------------------
730 '●DATA、X軸SUM表示(SYMBOL表示)
740 LDA$=RIGHT$("00000000"+HEX$(SAD&),8)+LDA$+" :"+RIGHT$("00"+HEX$(SMX&),2)
750 SYMBOL(0,Y),LDA$,1,1,7:SMX&=0:LDA$="":SAD&=SAD&+16
760 ON RDAT*-1 GOTO 950:ON K_ON*-1 GOTO 910
770 '●CHR表示(漢字off)
780 ' Y座標パラメ-タの書き込み
790 POKE ((PEEK(VARPTR(GC$),4))+2),Y1,2
800 ' *文字*
810 GCPAR$=GC$+DAT$
820 ' グラフィックBIOSコ-ル
830 BIOSNO&=&H20
840 R_EAX&=&H6201:R_EBX&=&H0:R_ECX&=&H0:R_EDX&=&H0
850 R_ESI&=PEEK(VARPTR(GCPAR$),4):R_EDI&=&H0
860 R_DS%=&H14:R_ES%=&H14:R_FS%=&H14:R_GS%=&H14
870 '
880 CALLM&H0A,BIOSNO&,VARPTR(R_EAX&),VARPTR(R_EBX&),VARPTR(R_ECX&),VARPTR(R_EDX&),VARPTR(R_ESI&),VARPTR(R_EDI&),VARPTR(R_DS%),VARPTR(R_ES%),VARPTR(R_FS%),VARPTR(R_GS%)
890 GOTO 950
900 '●CHR表示(漢字on PRINT表示)
910 FOR LOP1=0 TO 15
920 ON (PEEK(DAT&+LOP1)<&H20)*-1 GOSUB 1260
930 NEXT
940 LOCATE 61,Y/19:PRINT DAT$;
950 Y=Y+19:Y1=Y1+19:NEXT'-----------LOOP0 NEXT(256byt 一画面分)--------
960 '●Y軸SUM表示(SYMBOL表示)
970 DUM$="":ON RDAT*-1 GOTO 2170' RDAT=-1なら、Y軸SUMを表示しない
980 FOR LOP0=0 TO 15'--------------LOOP0 16回------------------
990 DUM$=DUM$+RIGHT$("00"+HEX$(SMY&(LOP0)),2)+" "
1000 SMY&=SMY&+SMY&(LOP0):SMY&(LOP0)=0
1010 NEXT'---------------LOOP0 NEXT(Y軸SUM 計算)----------------
1020 SYMBOL(72,380),DUM$+":"+RIGHT$("00"+HEX$(SMY&),2),1,1,7:SMY&=0
1030 '●キ-入力選択
1040 KY$=INKEY$:PF%=INP(&H600)
1050 IF PF%=&H5B GOTO 1240 '終了
1060 IF KY$="" GOTO 1040 '無入力
1070 IF KY$=CHR$(&H09) THEN ON DUMP*-1+1 GOSUB 1410,1370 'CTRL+I
1080 IF KY$=CHR$(&H0B) THEN ON K_ON*-1+1 GOSUB 1450,1490 'CTRL+K
1090 IF KY$=CHR$(&H13) AND DUMP=0 GOSUB 2430 'CTRL+S
1100 IF KY$=CHR$(&H1E) GOSUB 1280 '↑
1110 IF KY$=CHR$(&H2D) OR KY$=CHR$(&H16) GOSUB 1280 '-、前行
1120 IF KY$=CHR$(&H02) GOSUB 1300 'CTRL+B
1130 IF KY$=CHR$(&H0E) GOSUB 1320 'CTRL+N
1140 IF KY$=CHR$(&H1F) OR KY$=CHR$(&H0D) GOTO 600 '↓、RETURN
1150 IF KY$=CHR$(&H2B) OR KY$=CHR$(&H17) GOTO 600 '+、次行
1160 IF KY$=CHR$(&H12) GOTO 2150 'CTRL+R
1170 IF KY$=CHR$(&H08) GOTO 2540 'CTRL+H
1180 IF KY$=CHR$(&H01) GOTO 430 'CTRL+A
1190 IF KY$="M" OR KY$="m" GOTO 3220 ' M
1200 IF KY$="C" OR KY$="c" GOTO 3380 ' C
1210 IF KY$="X" OR KY$="x" GOTO 3610 ' X
1220 GOTO 1040
1230 '● プログラム終了処理
1240 CLS:WIDTH 80:CONSOLE 0,25,0:END
1250 '● "."に置き換える
1260 POKE DAT&+LOP1,&H2E:RETURN
1270 '● 前画面
1280 SAD&=SAD&-512:GOSUB 1340:KY$=CHR$(&H1F):RETURN
1290 '● 半、前画面
1300 SAD&=SAD&-384:GOSUB 1340:KY$=CHR$(&H1F):RETURN
1310 '● 半、次画面
1320 SAD&=SAD&-128:KY$=CHR$(&H1F):RETURN
1330 '● ゼロチェック
1340 IF SAD&<0 THEN SAD&=0
1350 RETURN
1360 '● メモリ-ダンプ モ-ド
1370 DUMP=0 :RDAT=0:K_ON=-1:GOSUB 1390:GOSUB 1470:KY$=CHR$(&H01):RETURN
1380 '● メモリ-ダンプ モ-ド表示
1390 LOCATE 60,1:PRINT "メモリ-":RETURN
1400 '● I/Oポ-トダンプ モ-ド
1410 DUMP=-1:RDAT=0:K_ON=-1:GOSUB 1430:GOSUB 1470:KY$=CHR$(&H01):RETURN
1420 '● I/Oポ-トダンプ モ-ド表示
1430 LOCATE 60,1:PRINT "I/O ":RETURN
1440 '● 漢字 ON モ-ド
1450 K_ON=-1:SAD&=SAD&-256:GOSUB 1470:KY$=CHR$(&H1F):RETURN
1460 '● 漢字 ON モ-ド表示
1470 LOCATE 69,1:PRINT " ":RETURN
1480 '● 漢字 OFF モ-ド
1490 K_ON=0 :SAD&=SAD&-256:GOSUB 1510:KY$=CHR$(&H1F):RETURN
1500 '● 漢字 OFF モ-ド表示
1510 LOCATE 69,1:PRINT "/OFF":RETURN
1520 '● I/Oアドレス チェック
1530 IF SAD&<&H3000 THEN SAD&=&H3000' I/Oアドレス最小値
1540 IF SAD&>&H3F00 THEN SAD&=&H3F00' I/Oアドレス最大値
1550 IF (SAD&>&H2F00) AND (SAD&<&H4000) THEN CMOS=-1
1560 '● I/Oポ-トを読む
1570 FOR LOP0=1 TO 16'--------------------LOOP0 16回-------------------
1580 '●4バイト単位で取り込み
1590 ON RDAT*-1 GOTO 2020 '並び替え取り込み
1600 ON CMOS*-1 GOTO 2200 'RDAT=0(通常でのCMOS用整列、SUM 計算)
1610 FOR LOP1=0 TO 12 STEP 4'-------------LOOP1 4回-------------
1620 DUM&=SAD&+LOP1:DUM&=INP(DUM&,4):POKE DAT&+LOP1,DUM&,4
1630 NEXT'---------------LOOP1 NEXT(16byt 1行分取り込み)---------
1640 '●整列、SUM 計算
1650 FOR LOP1=0 TO 15 '-------------LOOP1 16回-------------------
1660 LDA$=LDA$+" "+RIGHT$("00"+HEX$(PEEK(DAT&+LOP1)),2)
1670 SMY&(LOP1)=SMY&(LOP1)+PEEK(DAT&+LOP1):SMX&=SMX&+PEEK(DAT&+LOP1)
1680 NEXT'--------------------LOOP1 NEXT-------------------------
1690 '●DATA、X軸SUM表示(SYMBOL表示)
1700 LDA$=RIGHT$("00000000"+HEX$(SAD&),8)+LDA$+" :"+RIGHT$("00"+HEX$(SMX&),2)
1710 SYMBOL(0,Y),LDA$,1,1,7:SMX&=0:LDA$="":SAD&=SAD&+16
1720 ON RDAT*-1 GOTO 1910:ON K_ON*-1 GOTO 1860
1730 '●CHR表示(漢字off)
1740 ' Y座標パラメ-タの書き込み
1750 POKE ((PEEK(VARPTR(GC$),4))+2),Y1,2
1760 ' *文字*
1770 GCPAR$=GC$+DAT$
1780 ' グラフィックBIOSコ-ル
1790 BIOSNO&=&H20
1800 R_EAX&=&H6201:R_EBX&=&H0:R_ECX&=&H0:R_EDX&=&H0
1810 R_ESI&=PEEK(VARPTR(GCPAR$),4):R_EDI&=&H0
1820 R_DS%=&H14:R_ES%=&H14:R_FS%=&H14:R_GS%=&H14
1830 '
1840 CALLM&H0A,BIOSNO&,VARPTR(R_EAX&),VARPTR(R_EBX&),VARPTR(R_ECX&),VARPTR(R_EDX&),VARPTR(R_ESI&),VARPTR(R_EDI&),VARPTR(R_DS%),VARPTR(R_ES%),VARPTR(R_FS%),VARPTR(R_GS%)
1850 GOTO 1910
1860 '●CHR表示(漢字on PRINT表示)
1870 FOR LOP1=0 TO 15
1880 ON (PEEK(DAT&+LOP1)<&H20)*-1 GOSUB 1260
1890 NEXT
1900 LOCATE 61,Y/19:PRINT DAT$;
1910 Y=Y+19:Y1=Y1+19:NEXT'-----------LOOP0 NEXT(256byt 一画面分)--------
1920 '●Y軸SUM表示(SYMBOL表示)
1930 DUM$="":ON RDAT*-1 GOTO 2170' RDAT=-1なら、Y軸SUMを表示しない
1940 ON CMOS*-1 GOTO 2310
1950 FOR LOP0=0 TO 15'--------------LOOP0 16回------------------
1960 DUM$=DUM$+RIGHT$("00"+HEX$(SMY&(LOP0)),2)+" "
1970 SMY&=SMY&+SMY&(LOP0):SMY&(LOP0)=0
1980 NEXT'---------------LOOP0 NEXT(Y軸SUM 計算)----------------
1990 SYMBOL(72,380),DUM$+":"+RIGHT$("00"+HEX$(SMY&),2),1,1,7:SMY&=0
2000 GOTO 1030
2010 '● 並び替え取り込み(DUMP=-1,RDAT=-1の時)
2020 DUM$="":NUB=0
2030 FOR LOP1=0 TO 12 STEP 4'-------------LO0P1 4回-------------
2040 DUM&=SAD&+LOP1:DUM&=INP(DUM&,4)
2050 DUM$=DUM$+RIGHT$("00000000"+HEX$(DUM&),8)
2060 NEXT'---------------LOOP1 NEXT(16byt 1行分取り込み)---------
2070 ON CMOS*-1 GOTO 2370 'RDAT=0(並び替えでのCMOS用整列、SUM 計算)
2080 FOR LOP1=1 TO 32 STEP 2'-------------LO0P1 16回-------------
2090 LDA$=LDA$+" "+MID$(DUM$,LOP1,2)
2100 SMY&(NUB)=SMY&(NUB)+VAL("&H"+MID$(DUM$,LOP1,2)):NUB=NUB+1
2110 SMX&=SMX&+VAL("&H"+MID$(DUM$,LOP1,2))
2120 NEXT'---------------LOOP1 NEXT(16byt 整列,SUM 計算)---------
2130 GOTO 1700
2140 '● リアルデ-タモ-ド
2150 RDAT=NOT(RDAT):SAD&=SAD&-256:GOTO 530
2160 '● Y軸SUM初期化(RDAT=-1の時)
2170 SYMBOL(72,380),SPACE$(69),1,1,7
2180 FOR LOP0=0 TO 15:SMY&(LOP0)=0:NEXT:GOTO 1040
2190 '● CMOS=-1 通常取り込み
2200 FOR LOP1=0 TO 12 STEP 4'-------------LOOP1 4回-------------
2210 DUM&=SAD&+LOP1:DUM&=INP(DUM&,4):POKE DAT&+LOP1,DUM&,4
2220 POKE DAT&+LOP1+1,&H2E:POKE DAT&+LOP1+3,&H2E
2230 NEXT'---------------LOOP1 NEXT(16byt 1行分取り込み)---------
2240 '● CMOS=-1 通常整列,SUM 計算
2250 FOR LOP1=0 TO 15 STEP 2'--------------- LOOP1 8回-----------
2260 LDA$=LDA$+" "+RIGHT$("00"+HEX$(PEEK(DAT&+LOP1)),2)+" .."
2270 SMY&(LOP1)=SMY&(LOP1)+PEEK(DAT&+LOP1):SMX&=SMX&+PEEK(DAT&+LOP1)
2280 NEXT'----------------LOOP1 NEXT-----------------------------
2290 GOTO 1700
2300 '● CMOS=-1 通常YSUM 計算
2310 FOR LOP0=0 TO 14 STEP 2'--------------LOOP0 8回------------
2320 DUM$=DUM$+RIGHT$("00"+HEX$(SMY&(LOP0)),2)+" .. "
2330 SMY&=SMY&+SMY&(LOP0):SMY&(LOP0)=0:SMY&(LOP0+1)=0
2340 NEXT'---------------LOOP0 NEXT(Y軸SUM 計算)----------------
2350 GOTO 1990
2360 '● CMOS=-1 並び替え整列,SUM 計算
2370 FOR LOP1=3 TO 31 STEP 4'-------------LOOP1 8回-------------
2380 LDA$=LDA$+" .. "+MID$(DUM$,LOP1,2)
2390 SMX&=SMX&+VAL("&H"+MID$(DUM$,LOP1,2))
2400 NEXT'---------------LOOP0 NEXT-----------------------------
2410 GOTO 2130
2420 '● セレクタ変更(数値の有効、無効のチェックしていません。)
2430 CLS 5:CLS 1:LOCATE 10,10:INPUT"セレクタ値:&H",DUM$
2440 IF KLEN(DUM$)<>LEN(DUM$) THEN GOTO 2430' 2Byt文字除外
2450 IF VAL("&H"+DUM$)=0 OR VAL("&H"+DUM$)>&HFFFF THEN GOTO 2430' 桁制限
2460 SRC&=VAL("&H"+DUM$):KY$=CHR$(&H01):RETURN
2470 '● BIOSコ-ル用、変数定義
2480 BIOSNO&=&H90:R_EAX&=&H0600:R_EBX&=&H0:R_ECX&=&H0:R_EDX&=&H0
2490 R_ESI&=&H0:R_EDI&=&H0:R_DS%=&H14:R_ES%=&H14:R_FS%=&H14:R_GS%=&H14
2500 ' キ-ボ-ドBIOSコ-ル(キ-バッファ クリア)
2510 CALLM &H0A,BIOSNO&,VARPTR(R_EAX&),VARPTR(R_EBX&),VARPTR(R_ECX&),VARPTR(R_EDX&),VARPTR(R_ESI&),VARPTR(R_EDI&),VARPTR(R_DS%),VARPTR(R_ES%),VARPTR(R_FS%),VARPTR(R_GS%)
2520 RETURN
2530 '● キ-機能表示
2540 CLS 5:CLS 1:LOCATE 0,4
2550 PRINT "●キ-機能表示 ON:CTRL+H"
2560 PRINT "●次画面:次行、↓、+、RETURN、CTRL+M"
2570 PRINT "●前画面:前行、↑、-"
2580 PRINT "●半、次画面:CTRL+N"
2590 PRINT "●半、前画面:CTRL+B"
2600 PRINT "●画面停止:PF1"
2610 PRINT "●アドレス入力:CTRL+A"
2620 PRINT "●アドレス記憶 ON: M (NO.1-6 入力)"
2630 PRINT "●アドレス変換 ON: C (NO.1-6 入力)"
2640 PRINT "●数値変換 ON:X ,OFF:RETURN"
2650 PRINT "●終了:PF12"
2660 PRINT "●I/Oダンプモ-ド ON, OFF:CTRL+I"
2670 PRINT "●リアルデ-タモ-ド ON, OFF:CTRL+R"
2680 PRINT "●漢字 OFF, ON:CTRL+K"
2690 KY$=INKEY$:ON (KY$="")*-1 GOTO 2690
2700 SAD&=SAD&-256:GOTO 600
2710 '● コントロ-ルコ-ド表示(PRINT 表示)
2720 LOCATE 0,21:PRINT CHR$(&H1B)+"[1;32m"' ESCコ-ドの指定
2730 ' キャラクタ-コ-ドの00hより
2740 CC=5:CR&=&H8100
2750 LOCATE CC ,21:PRINT MKL$(CR& )+" : "
2760 LOCATE CC ,22:PRINT MKL$(CR&+ 1)+": "
2770 LOCATE CC ,23:PRINT MKL$(CR&+ 2)+": ";
2780 CC=12
2790 LOCATE CC ,21:PRINT MKL$(CR&+ 3)+": "
2800 LOCATE CC ,22:PRINT MKL$(CR&+ 4)+": "
2810 LOCATE CC ,23:PRINT MKL$(CR&+ 5)+": ";
2820 CC=19
2830 LOCATE CC ,21:PRINT MKL$(CR&+ 6)+": "
2840 LOCATE CC+1,22:PRINT "BL "
2850 LOCATE CC ,23:PRINT MKL$(CR&+ 8)+": ";
2860 CC=26
2870 LOCATE CC ,21:PRINT MKL$(CR&+ 9)+": "
2880 LOCATE CC ,22:PRINT MKL$(CR&+10)+": "
2890 LOCATE CC ,23:PRINT MKL$(CR&+11)+": ";
2900 CC=33
2910 LOCATE CC+1,21:PRINT "CL "
2920 LOCATE CC ,22:PRINT MKL$(CR&+13)+": "
2930 LOCATE CC ,23:PRINT MKL$(CR&+14)+": ";
2940 CC=40:FOR CR&=&H810F TO &H8114 STEP 3
2950 LOCATE CC ,21:PRINT MKL$(CR& )+": "
2960 LOCATE CC ,22:PRINT MKL$(CR&+ 1)+": "
2970 LOCATE CC ,23:PRINT MKL$(CR&+ 2)+": ";
2980 CC=CC+7:NEXT
2990 CC=54
3000 LOCATE CC+1,21:PRINT "NK "
3010 LOCATE CC+1,22:PRINT "SN "
3020 LOCATE CC ,23:PRINT MKL$(&H8117)+": ";
3030 CC=61:FOR CR&=&H8118 TO &H811B STEP 3
3040 LOCATE CC ,21:PRINT MKL$(CR& )+": "
3050 LOCATE CC ,22:PRINT MKL$(CR&+ 1)+": "
3060 LOCATE CC ,23:PRINT MKL$(CR&+ 2)+": ";
3070 CC=CC+7:NEXT
3080 CC=75
3090 LOCATE CC ,21:PRINT MKL$(&H811E)+": "
3100 LOCATE CC ,22:PRINT MKL$(&H811F)+": "
3110 ' CHR$No.表示
3120 CC=2:FOR LOP0=0 TO &H1C STEP 3
3130 LOCATE CC,21:PRINT RIGHT$("00"+HEX$(LOP0 ),2)+"h="
3140 LOCATE CC,22:PRINT RIGHT$("00"+HEX$(LOP0+1),2)+"h="
3150 LOCATE CC,23:PRINT RIGHT$("00"+HEX$(LOP0+2),2)+"h=";
3160 CC=CC+7:NEXT
3170 LOCATE CC,21:PRINT HEX$(&H1E)+"h="
3180 LOCATE CC,22:PRINT HEX$(&H1F)+"h=";
3190 PRINT CHR$(&H1B)+"[0;1m";' ESCコ-ドの指定解除
3200 RETURN
3210 '● アドレス、モ-ドメモ
3220 LOCATE 61,20:PRINT CHR$(&H1B)+"[1;32m";"アドレス記憶";CHR$(&H1B)+"[0;1m"
3230 GOSUB 3540' アドレス、モ-ド表示 へ
3240 KY$=INKEY$:ON (KY$="")*-1 GOTO 3240
3250 IF KY$<"7" AND KY$>"0" THEN
3260 MID$(ADM$,(VAL(KY$)-1)*23+1,20)=RIGHT$("00"+KY$,2)+"."+RIGHT$("0000"+HEX$(SRC&),4)+"."+RIGHT$("00000000"+HEX$(SAD&-256),8)
3270 MID$(ADM$,(VAL(KY$)-1)*23+17,2)=".M"
3280 IF DUMP=-1 THEN MID$(ADM$,(VAL(KY$)-1)*23+17,2)=".I"
3290 MID$(ADM$,(VAL(KY$)-1)*23+19,1)="*"
3300 IF RDAT=-1 THEN MID$(ADM$,(VAL(KY$)-1)*23+19,1)="R"
3310 MID$(ADM$,(VAL(KY$)-1)*23+20,1)="*"
3320 IF KAOF=-1 THEN MID$(ADM$,(VAL(KY$)-1)*23+20,1)="-"
3330 ELSE
3340 LOCATE 61,20:PRINT SPACE$(12):GOSUB 2720:GOTO 1040
3350 ENDIF
3360 GOTO 3230
3370 '● アドレス、モ-ドチェンジ
3380 LOCATE 61,20:PRINT CHR$(&H1B)+"[1;32m";"アドレス変換";CHR$(&H1B)+"[0;1m"
3390 GOSUB 3540' アドレス、モ-ド表示 へ
3400 KY$=INKEY$:ON (KY$="")*-1 GOTO 3400
3410 IF KY$<"7" AND KY$>"0" THEN
3420 SRC&=VAL("&H"+MID$(ADM$,(VAL(KY$)-1)*23+5,4))
3430 SAD&=VAL("&H"+MID$(ADM$,(VAL(KY$)-1)*23+10,8))
3440 IF SRC&=0 THEN SRC&=&H14:GOTO 3400
3450 IF MID$(ADM$,(VAL(KY$)-1)*23+18,1)="M" THEN DUMP=0 ELSE DUMP=-1
3460 IF MID$(ADM$,(VAL(KY$)-1)*23+19,1)="*" THEN RDAT=0 ELSE RDAT=-1
3470 IF MID$(ADM$,(VAL(KY$)-1)*23+20,1)="*" THEN KAOF=0 ELSE KAOF=-1
3480 LOCATE 61,20:PRINT SPACE$(12)
3490 GOSUB 2720:ON DUMP*-1+1 GOSUB 1390,1430
3500 ON KAOF*-1+1 GOSUB 1470,1510:GOTO 530
3510 ENDIF
3520 LOCATE 61,20:PRINT SPACE$(12):GOSUB 2720:GOTO 1040
3530 '● アドレス、モ-ド表示
3540 LOCATE 0,21:PRINT CHR$(&H1B)+"[1;32m"' ESCコ-ドの指定
3550 LOCATE 2,21:PRINT "NO.セレクタ. アドレス.モ-ド: NO.セレクタ. アドレス.モ-ド: NO.セレクタ. アドレス.モ-ド"+SPACE$(9)
3560 LOCATE 2,22:PRINT LEFT$ (ADM$,66)+SPACE$(10)
3570 LOCATE 2,23:PRINT RIGHT$(ADM$,66)+SPACE$(4);
3580 LOCATE 0,21:PRINT CHR$(&H1B)+"[0;1m"' ESCコ-ドの指定解除
3590 RETURN
3600 '● 16進、10進、2進 変換
3610 ON ERROR GOTO 4650
3620 LOCATE 0,21:PRINT SPACE$(79);:PRINT SPACE$(79);:PRINT SPACE$(79);
3630 LOCATE 2,22:INPUT":",DUM$
3640 IF LEN(DUM$)=0 THEN ON ERROR GOTO 0:GOSUB 2720:GOTO 1040
3650 ON (KLEN(DUM$)<>LEN(DUM$))*-1 GOTO 3620 ' 2Byt文字除外
3660 NO=INSTR(1,DUM$,"="):ON (NO=0)*-1 GOTO 3620 ' "=" チェック
3670 ' 16進-----> ??
3680 ON (INSTR(1,LEFT$(DUM$,NO),"&h")>0)*-1 GOTO 3760
3690 ON (INSTR(1,LEFT$(DUM$,NO),"&H")>0)*-1 GOTO 3760
3700 ' 2進------> ??
3710 ON (INSTR(1,LEFT$(DUM$,NO),"b")>0)*-1 GOTO 3800
3720 ON (INSTR(1,LEFT$(DUM$,NO),"B")>0)*-1 GOTO 3800
3730 ' 10進-----> ??
3740 GOTO 3860
3750 ' 16進----->2進
3760 ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"b")>0)*-1 GOTO 3960
3770 ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"B")>0)*-1 GOTO 3960
3780 ' 16進----->10進
3790 ON (LEN(DUM$)=NO)*-1 GOTO 3930
3800 ' 2進----->16進
3810 ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"&h")>0)*-1 GOTO 4370
3820 ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"&H")>0)*-1 GOTO 4370
3830 ' 2進----->10進
3840 ON (LEN(DUM$)=NO)*-1 GOTO 4370
3850 ' 10進----->16進
3860 ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"&h")>0)*-1 GOTO 4630
3870 ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"&H")>0)*-1 GOTO 4630
3880 ' 10進----->2進
3890 ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"b")>0)*-1 GOTO 4170
3900 ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"B")>0)*-1 GOTO 4170
3910 GOTO 3620
3920 ' 16----->10進変換表示
3930 LOCATE NO+3,22:PRINT VAL(LEFT$(DUM$,NO))
3940 KY$=INKEY$:ON (KY$="")*-1 GOTO 3940:GOTO 3620
3950 ' 16----->2進変換表示
3960 DUM$=DUM$+"it("
3970 FOR LOP0=3 TO LEN(HEX$(VAL(LEFT$(DUM$,NO-1))))+3
3980 IF MID$(DUM$,LOP0,1)="0" DUM$=DUM$+"0000"
3990 IF MID$(DUM$,LOP0,1)="1" DUM$=DUM$+"0001"
4000 IF MID$(DUM$,LOP0,1)="2" DUM$=DUM$+"0010"
4010 IF MID$(DUM$,LOP0,1)="3" DUM$=DUM$+"0011"
4020 IF MID$(DUM$,LOP0,1)="4" DUM$=DUM$+"0100"
4030 IF MID$(DUM$,LOP0,1)="5" DUM$=DUM$+"0101"
4040 IF MID$(DUM$,LOP0,1)="6" DUM$=DUM$+"0110"
4050 IF MID$(DUM$,LOP0,1)="7" DUM$=DUM$+"0111"
4060 IF MID$(DUM$,LOP0,1)="8" DUM$=DUM$+"1000"
4070 IF MID$(DUM$,LOP0,1)="9" DUM$=DUM$+"1001"
4080 IF MID$(DUM$,LOP0,1)="A" DUM$=DUM$+"1010"
4090 IF MID$(DUM$,LOP0,1)="B" DUM$=DUM$+"1011"
4100 IF MID$(DUM$,LOP0,1)="C" DUM$=DUM$+"1100"
4110 IF MID$(DUM$,LOP0,1)="D" DUM$=DUM$+"1101"
4120 IF MID$(DUM$,LOP0,1)="E" DUM$=DUM$+"1110"
4130 IF MID$(DUM$,LOP0,1)="F" DUM$=DUM$+"1111"
4140 NEXT:DUM$=DUM$+")"
4150 LOCATE 3,22:PRINT DUM$:GOTO 3940
4160 ' 10----->2進変換表示
4170 DUM$=DUM$+"it("
4180 FOR LOP0=1 TO LEN(HEX$(VAL(LEFT$(DUM$,NO))))+1
4190 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="0" DUM$=DUM$+"0000"
4200 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="1" DUM$=DUM$+"0001"
4210 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="2" DUM$=DUM$+"0010"
4220 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="3" DUM$=DUM$+"0011"
4230 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="4" DUM$=DUM$+"0100"
4240 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="5" DUM$=DUM$+"0101"
4250 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="6" DUM$=DUM$+"0110"
4260 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="7" DUM$=DUM$+"0111"
4270 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="8" DUM$=DUM$+"1000"
4280 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="9" DUM$=DUM$+"1001"
4290 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="A" DUM$=DUM$+"1010"
4300 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="B" DUM$=DUM$+"1011"
4310 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="C" DUM$=DUM$+"1100"
4320 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="D" DUM$=DUM$+"1101"
4330 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="E" DUM$=DUM$+"1110"
4340 IF MID$(HEX$(VAL(LEFT$(DUM$,NO))),LOP0,1)="F" DUM$=DUM$+"1111"
4350 NEXT:DUM$=DUM$+")"
4360 LOCATE 3,22:PRINT DUM$:GOTO 3940
4370 ' 2->16(10)進変換表示
4380 NO1=INSTR(1,LEFT$(DUM$,NO-1),"B"):ON (NO1>0)*-1 GOTO 4400
4390 NO1=INSTR(1,LEFT$(DUM$,NO-1),"b")
4400 FOR LOP0=2 TO LEN(MID$(DUM$,NO1+1,NO-2)) STEP 4
4410 IF MID$(DUM$,LOP0,4)="0000" DUM$=DUM$+"0"
4420 IF MID$(DUM$,LOP0,4)="0001" DUM$=DUM$+"1"
4430 IF MID$(DUM$,LOP0,4)="0010" DUM$=DUM$+"2"
4440 IF MID$(DUM$,LOP0,4)="0011" DUM$=DUM$+"3"
4450 IF MID$(DUM$,LOP0,4)="0100" DUM$=DUM$+"4"
4460 IF MID$(DUM$,LOP0,4)="0101" DUM$=DUM$+"5"
4470 IF MID$(DUM$,LOP0,4)="0110" DUM$=DUM$+"6"
4480 IF MID$(DUM$,LOP0,4)="0111" DUM$=DUM$+"7"
4490 IF MID$(DUM$,LOP0,4)="1000" DUM$=DUM$+"8"
4500 IF MID$(DUM$,LOP0,4)="1001" DUM$=DUM$+"9"
4510 IF MID$(DUM$,LOP0,4)="1010" DUM$=DUM$+"A"
4520 IF MID$(DUM$,LOP0,4)="1011" DUM$=DUM$+"B"
4530 IF MID$(DUM$,LOP0,4)="1100" DUM$=DUM$+"C"
4540 IF MID$(DUM$,LOP0,4)="1101" DUM$=DUM$+"D"
4550 IF MID$(DUM$,LOP0,4)="1110" DUM$=DUM$+"E"
4560 IF MID$(DUM$,LOP0,4)="1111" DUM$=DUM$+"F"
4570 NEXT
4580 ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"&h")>0)*-1 GOTO 4610
4590 ON (INSTR(1,RIGHT$(DUM$,LEN(DUM$)-NO),"&H")>0)*-1 GOTO 4610
4600 LOCATE NO+3,22:PRINT VAL("&H"+RIGHT$(DUM$,LEN(DUM$)-NO)):GOTO 3940
4610 LOCATE 3,22 :PRINT DUM$:GOTO 3940
4620 ' 10----->16進変換表示
4630 LOCATE NO+5,22:PRINT RIGHT$("00000000"+HEX$(VAL(LEFT$(DUM$,NO))),8):GOTO 3940
4640 ' 入力値のチェック
4650 ON (ERR=6)*-1 GOTO 3620:RESUME